<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>%(DocumentTitle)</title>
    <link rel="stylesheet" type="text/css" href="./swagger-ui.css" />
    <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
    <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
    <style>
        html {
            box-sizing: border-box;
/*            overflow: -moz-scrollbars-vertical;*/
            overflow-y: scroll;
        }

        *,
        *:before,
        *:after {
            box-sizing: inherit;
        }

        body {
            margin: 0;
            background: #fafafa;
        }
    </style>
    %(HeadContent)
</head>

<body>
    <div id="swagger-ui"></div>

    <!-- Workaround for https://github.com/swagger-api/swagger-editor/issues/1371 -->
    <script>
            if (window.navigator.userAgent.indexOf('Edge') > -1) {
                console.log("Removing native Edge fetch in favor of swagger-ui's polyfill");
                window.fetch = undefined;
            }
    </script>

    <script src="./swagger-ui-bundle.js"></script>
    <script src="./swagger-ui-standalone-preset.js"></script>
    <script>
            /* Source: https://gist.github.com/lamberta/3768814
             * Parse a string function definition and return a function object. Does not use eval.
             * @param {string} str
             * @return {function}
             *
             * Example:
             *  var f = function (x, y) { return x * y; };
             *  var g = parseFunction(f.toString());
             *  g(33, 3); //=> 99
             */
            function parseFunction(str) {
                if (!str) return void 0;

                var fn_body_idx = str.indexOf('{'),
                    fn_body = str.substring(fn_body_idx + 1, str.lastIndexOf('}')),
                    fn_declare = str.substring(0, fn_body_idx),
                    fn_params = fn_declare.substring(fn_declare.indexOf('(') + 1, fn_declare.lastIndexOf(')')),
                    args = fn_params.split(',');

                args.push(fn_body);

                function Fn() {
                    return Function.apply(this, args);
                }
                Fn.prototype = Function.prototype;

                return new Fn();
            }

            window.onload = function () {
                var configObject = JSON.parse('%(ConfigObject)');
                var oauthConfigObject = JSON.parse('%(OAuthConfigObject)');

                // Workaround for https://github.com/swagger-api/swagger-ui/issues/5945
                configObject.urls.forEach(function (item) {
                    if (item.url.startsWith('http') || item.url.startsWith('/')) return;
                    item.url = window.location.href.replace('index.html', item.url).split('#')[0];
                });

                // If validatorUrl is not explicitly provided, disable the feature by setting to null
                if (!configObject.hasOwnProperty('validatorUrl')) configObject.validatorUrl = null;

                // If oauth2RedirectUrl isn't specified, use the built-in default
                if (!configObject.hasOwnProperty('oauth2RedirectUrl')) configObject.oauth2RedirectUrl = new URL('oauth2-redirect.html', window.location.href).href;

                // Apply mandatory parameters
                configObject.dom_id = '#swagger-ui';
                configObject.presets = [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset];
                configObject.layout = 'StandaloneLayout';

                // Parse and add interceptor functions
                var interceptors = JSON.parse('%(Interceptors)');
                if (interceptors.RequestInterceptorFunction) configObject.requestInterceptor = parseFunction(interceptors.RequestInterceptorFunction);
                if (interceptors.ResponseInterceptorFunction) configObject.responseInterceptor = parseFunction(interceptors.ResponseInterceptorFunction);

                // Begin Swagger UI call region

                function getAuthorizeButtonCssClass() {
                    return dvs.auth.getToken() ? 'cancel' : 'authorize';
                }

                function getAuthorizeButtonText() {
                    return dvs.auth.getToken() ? '退出' : '登录';
                }

                configObject.plugins = [
                    function (system) {
                        return {
                            components: {
                                authorizeBtn: function () {
                                    return system.React.createElement(
                                        'div',
                                        {
                                            className: 'auth-wrapper',
                                        },
                                        system.React.createElement(
                                            'button',
                                            {
                                                id: 'authorize',
                                                className: 'btn ' + getAuthorizeButtonCssClass(),
                                                style: {
                                                    lineHeight: 'normal',
                                                },
                                                onClick: function () {
                                                    if (dvs.auth.getToken()) {
                                                        dvs.swagger.logout();
                                                        location.reload();
                                                    } else {
                                                        dvs.swagger.openAuthDialog(function () {
                                                            location.reload();
                                                        });
                                                    }
                                                },
                                            },
                                            getAuthorizeButtonText()
                                        )
                                    );
                                },
                            },
                        };
                    },
                ];

                const ui = SwaggerUIBundle(configObject);

                ui.initOAuth(oauthConfigObject);

                // End Swagger UI call region

                window.ui = ui;
            };
    </script>
</body>
</html>